#include <REGX52.H>
#include "OneWire.h"

//DS18B20指令
#define DS18B20_SKIP_ROM			0xCC
#define DS18B20_CONVERT_T			0x44
#define DS18B20_READ_SCRATCHPAD 	0xBE

/**
  * @brief  DS18B20开始温度变换
  * @param  无
  * @retval 无
  */
void DS18B20_ConvertT(void)
{
	OneWire_Init();							//初始化
	OneWire_SendByte(DS18B20_SKIP_ROM);		//跳过ROM
	OneWire_SendByte(DS18B20_CONVERT_T);	//开始温度变换
}

/**
  * @brief  DS18B20读取温度
  * @param  无
  * @retval 温度数值
  */
float DS18B20_ReadT(void)
{
	unsigned char TLSB,TMSB;
	int Temp;
	float T;
	OneWire_Init();								//初始化
	OneWire_SendByte(DS18B20_SKIP_ROM);			//跳过ROM
	OneWire_SendByte(DS18B20_READ_SCRATCHPAD);	//读暂存器
	TLSB=OneWire_ReceiveByte();					//连续的读操作,温度字节的低位
	TMSB=OneWire_ReceiveByte();					//连续的读操作，温度字节的高位
	Temp=(TMSB<<8)|TLSB;						//温度字节高低位存在一起
	T=Temp/16.0;			//此时Temp是整形，/16.0将后四位移动到小数位并转换为浮点型
	return T;
}